import defineReactive from './Reactive.js'
// 用于为 传入对象的 每个属性 都添加 getter / setter
export default class Observer {
  constructor(propertyObj) {
    Observer.defProperty(propertyObj, '__ob__', this, false)
    // 为传入的属性对象 中的子属性 添加 观察者属性
    this.walk(propertyObj)
  }

  walk(obj) {
    var keys = Object.keys(obj);
    for (var i = 0; i < keys.length; i++) {
      defineReactive(obj, keys[i]);
    }
  }

  static defProperty(obj, key, value, enumerable) {
    Object.defineProperty(obj, key, {
      enumerable,
      value,
      writable: true,
      configurable: true
    })
  }
}